package edu.xjtu.jih.item;

import edu.xjtu.jih.common.Utils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class ItemService {

    //    添加商品,添加成功返回1,不成功返回-1
    //    添加商品时需要在商品表添加该商品,同时需要在用户商品表添加
    public int addItem(ItemDto dto) {
        SqlSession sess = Utils.openSession();
        try{
            if (dto.getU_id()==0){
                //  未登录时返回提示信息
                return -1;
            }
            ItemDao dao=sess.getMapper(ItemDao.class);

            //  向商品表添加信息
            dto.setItem_id(dao.findItemId()+1);
            dto.setStatus(1);//默认没有售出
            dao.addItem(dto);

            //  向用户商品表添加数据
            User_item temp=new User_item();
            temp.setU_id(dto.getU_id());
            temp.setItem_id(dto.getItem_id());
            temp.setUpload(1);//1表示该条记录表示商品
            dao.addUser_Item(temp);


            sess.commit();
            return 1;

        }catch(Exception e){
            sess.rollback();
            e.printStackTrace();
            throw new RuntimeException("添加商品信息失败");
        }finally {
            sess.close();
        }
    }

    //    返回一个商品的详细信息
    public ItemDto getItem(ItemDto dto) {

        SqlSession sess = Utils.openSession();
        ItemDto itemInfo=null;
        try{
            ItemDao dao=sess.getMapper(ItemDao.class);

            itemInfo=dao.getItem(dto.getItem_id());

            System.out.println(itemInfo);
            sess.commit();

        }catch(Exception e){
            sess.rollback();
            e.printStackTrace();
            throw new RuntimeException("查找商品信息失败");
        }finally {
            sess.close();
        }

        return itemInfo;
    }

    //    返回所有商品的信息
    public List<ItemDto> getAllItem(ItemDto dto) {

        SqlSession sess = Utils.openSession();
        List<ItemDto> itemDtoList=null;
        try{
            ItemDao dao=sess.getMapper(ItemDao.class);

            itemDtoList=dao.getAllItem();

            sess.commit();

        }catch(Exception e){
            sess.rollback();
            e.printStackTrace();
            throw new RuntimeException("查找商品信息失败");
        }finally {
            sess.close();
        }

        return itemDtoList;
    }

    //  根据商品id删除商品信息
    //  需要处理商品表中的信息，同时需要处理用户商品表中的信息,还需检查收藏表,将其中的该商品相关信息删除
    public int delItem(int item_id) {
        SqlSession sess = Utils.openSession();
        int succ=0;//返回值,是否删除成功,1表示成功,0表示失败
        try{
            ItemDao dao=sess.getMapper(ItemDao.class);

            dao.delUser_Item(item_id);
            dao.delUser_Star(item_id);

            succ=dao.delItem(item_id);
            sess.commit();

        }catch(Exception e){
            sess.rollback();
            e.printStackTrace();
            throw new RuntimeException("删除商品信息失败");
        }finally {
            sess.close();
        }

        return succ;
    }

    // 修改商品信息
    public void changeItemInfo(ItemDto dto) {
        SqlSession sess = Utils.openSession();
        try{
            ItemDao dao=sess.getMapper(ItemDao.class);
//            if (dto.getItem_image()==null)
//                dao.changeItemInfo(dto);
//            else
//                dao.changeItemInfoWithImage(dto);
            dao.changeItemInfo(dto);
            sess.commit();

        }catch(Exception e){
            sess.rollback();
            e.printStackTrace();
            throw new RuntimeException("修改商品信息失败");
        }finally {
            sess.close();
        }
    }
}
